home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 79 / maccd 79.iso / multimedial / GL Tron / Source / gltron / game.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-07-20  |  4.6 KB  |  179 lines  |  [TEXT/CWIE]

  1. #include "gltron.h"
  2.  
  3. static int lod_n = 3;
  4. static char *lod_names[] = {
  5.   "lightcycle high.obj",
  6.   "lightcycle med.obj",
  7.   "lightcycle low.obj"
  8. };
  9. /* static int lod_dist[] = { 25, 50, 150 }; */
  10.  
  11. void initClientData() {
  12.   /* for each player */
  13.   /*   init camera (if any) */
  14.  
  15.   /* needs read access to server data
  16.      to initialize camera */
  17.  
  18.   int i, j;
  19.   Camera *cam;
  20.   Data *data;
  21.   Model *model;
  22.  
  23.   for(i = 0; i < game->players; i++) {
  24.     cam = game->player[i].camera;
  25.     data = game->player[i].data;
  26.     model = game->player[i].model;
  27.  
  28.     for(j = 0; j < model->lod; j++)
  29.       setMaterialAlphas(model->mesh[j], 1.0);
  30.  
  31.     cam->camType = game->settings->camType;
  32.     cam->target[0] = data->posx;
  33.     cam->target[1] = data->posy;
  34.     cam->target[2] = 0;
  35.  
  36.     cam->cam[0] = data->posx + CAM_CIRCLE_DIST;
  37.     cam->cam[1] = data->posy;
  38.     cam->cam[2] = CAM_CIRCLE_Z;
  39.   }
  40.  
  41.   cam_chi = M_PI / 3;
  42.   cam_phi = 0;
  43. }
  44.  
  45. void initDisplay(gDisplay *d, int type, int p, int onScreen) {
  46.   int field;
  47.   field = game->screen->vp_w / 32;
  48.   d->h = game->screen->h;
  49.   d->w = game->screen->w;
  50.   d->vp_x = game->screen->vp_x + vp_x[type][p] * field;
  51.   d->vp_y = game->screen->vp_y + vp_y[type][p] * field;
  52.   d->vp_w = vp_w[type][p] * field;
  53.   d->vp_h = vp_h[type][p] * field;
  54.   d->blending = 1;
  55.   d->fog = 0;
  56.   d->wall = 1;
  57.   d->onScreen = onScreen;
  58. }  
  59.  
  60. void changeDisplay() {
  61.   int i;
  62.   for(i = 0; i < game->players; i++)
  63.     game->player[i].display->onScreen = 0;
  64.   for(i = 0; i < vp_max[game->settings->display_type]; i++)
  65.        initDisplay(game->player[ game->settings->content[i] ].display, 
  66.            game->settings->display_type, i, 1);
  67. }
  68.  
  69. void playEngine(void *data, Uint8 *stream, int len) {
  70.   mixEngineSound(0, stream, len);
  71. }
  72.  
  73. void initGame() { /* called when game mode is entered */
  74.   game2->time.offset = SystemGetElapsedTime() - game2->time.current;
  75. #ifdef SOUND
  76.   Mix_SetPostMix(playEngine, NULL);
  77. #endif
  78. }
  79.  
  80. void exitGame() {
  81. #ifdef SOUND
  82.   Mix_SetPostMix(NULL, NULL);
  83. #endif
  84. }
  85.  
  86. void initModel(Player *p, int p_num) {
  87.   int i, j;
  88.   char *path;
  89.  
  90.   p->model->lod = lod_n;
  91.   p->model->mesh = (Mesh**) malloc(lod_n * sizeof(Mesh*));
  92.   /* p->model->lod_dist = (int*) malloc(lod_n * sizeof(int)); */
  93.  
  94.   for(i = 0; i < lod_n; i++) {
  95.     /* p->model->lod_dist[i] = lod_dist[i]; */
  96.     /* load player mesh, currently only one type */
  97.     path = getFullPath(lod_names[i]);
  98.     /* path = getFullPath("tron-med.obj"); */
  99.     if(path != NULL)
  100.       /* model size == CYCLE_HEIGHT */
  101.       p->model->mesh[i] = loadModel(path, CYCLE_HEIGHT, 0);
  102.     else {
  103.       printf("fatal: could not load model - exiting...\n");
  104.       exit(1);
  105.     }
  106.     
  107.     free(path);
  108.   }
  109.  
  110.   /* copy contents from colors_a[] to model struct */
  111.   for(j = 0; j < 4; j++) {
  112.     p->model->color_alpha[j] = colors_alpha[p_num][j];
  113.     p->model->color_model[j] = colors_model[p_num][j];
  114.   }
  115.   /* set material 0 to color_model */
  116.   for(i = 0; i < lod_n; i++) {
  117.     setMaterialAmbient(p->model->mesh[i], 0, p->model->color_model);
  118.     setMaterialDiffuse(p->model->mesh[i], 0, p->model->color_model);
  119.   }
  120. }
  121.  
  122. void defaultDisplay(int n) {
  123.   printf("set display to %d\n", n);
  124.   game->settings->display_type = n;
  125.   game->settings->content[0] = 0;
  126.   game->settings->content[1] = 1;
  127.   game->settings->content[2] = 2;
  128.   game->settings->content[3] = 3;
  129.   changeDisplay();
  130. }
  131.  
  132. void initGameScreen() {
  133.   gDisplay *d;
  134.   d = game->screen;
  135.   d->h = game->settings->height; d->w = game->settings->width;
  136.   d->vp_x = 0; d->vp_y = 0;
  137.   d->vp_w = d->w; d->vp_h = d->h;
  138. }
  139.  
  140. void cycleDisplay(int p) {
  141.   int q;
  142.   q = (game->settings->content[p] + 1) % game->players;
  143.   while(q != game->settings->content[p]) {
  144.     if(game->player[q].display->onScreen == 0)
  145.       game->settings->content[p] = q;
  146.     else q = (q + 1) % game->players;
  147.   }
  148.   changeDisplay();
  149. }
  150.  
  151. void gameMouseMotion(int x, int y) {
  152.   if(game->settings->camType == CAM_TYPE_MOUSE) 
  153.     if(x != MOUSE_ORIG_X || y != MOUSE_ORIG_Y) {
  154.       /* fprintf(stderr, "Mouse: dx: %d\tdy: %d\n", 
  155.        x - MOUSE_ORIG_Y, y - MOUSE_ORIG_Y); */
  156.       cam_phi += - (x - MOUSE_ORIG_X) * MOUSE_CX;
  157.       cam_chi += (y - MOUSE_ORIG_Y) * MOUSE_CY;
  158.       if(cam_chi < CAM_CHI_MIN) cam_chi = CAM_CHI_MIN;
  159.       if(cam_chi > CAM_CHI_MAX) cam_chi = CAM_CHI_MAX;
  160.       SystemWarpPointer(MOUSE_ORIG_X, MOUSE_ORIG_Y);
  161.     }
  162. }
  163.  
  164. #define CAM_DR 1.0
  165.  
  166. void gameMouse(int buttons, int state, int x, int y) {
  167.   if(game->settings->camType == CAM_TYPE_MOUSE) 
  168.     if(state == SYSTEM_MOUSEPRESSED) {
  169.       if(buttons == SYSTEM_MOUSEBUTTON_LEFT) {
  170.     cam_r -= CAM_DR;
  171.     if(cam_r < CAM_R_MIN) cam_r = CAM_R_MIN;
  172.       } else if(buttons == SYSTEM_MOUSEBUTTON_RIGHT) {
  173.     cam_r += CAM_DR;
  174.     if(cam_r > CAM_R_MAX) cam_r = CAM_R_MAX;
  175.       }
  176.     }
  177.   /* fprintf(stderr, "new cam_r: %.2f\n", cam_r); */
  178. }
  179.